package com.doge.walknovel.utils

import android.os.Build
import android.provider.Settings


object DeviceUtils {
    val deviceId by lazy { uniqueDeviceId() }

    private fun uniqueDeviceId(): String {
        if (isTestEnv) extraPrintUniqueDeviceIdInfo()

        val sb = StringBuilder()
        try {
            val androidId =
                Settings.Secure.getString(appContext.contentResolver, Settings.Secure.ANDROID_ID)
            if (androidId?.isNotEmpty() == true) {
                sb.append(androidId)
            }
        } catch (ignored: Exception) {
        }
        sb.append(Build.BOARD) // 获取设备基板名称
        sb.append(Build.BOOTLOADER) // 获取设备引导程序版本号
        sb.append(Build.BRAND) // 获取设备品牌
        sb.append(Build.CPU_ABI) // 获取设备指令集名称（CPU的类型）
        sb.append(Build.CPU_ABI2) // 获取第二个指令集名称
        sb.append(Build.DEVICE) // 获取设备驱动名称
        sb.append(Build.DISPLAY) // 获取设备显示的版本包（在系统设置中显示为版本号）和ID一样
        sb.append(Build.FINGERPRINT) // 设备的唯一标识。由设备的多个信息拼接合成。
        sb.append(Build.HARDWARE) // 设备硬件名称,一般和基板名称一样（BOARD）
        sb.append(Build.ID) // 设备版本号。
        sb.append(Build.MODEL) // 获取手机的型号 设备名称。
        sb.append(Build.MANUFACTURER) // 获取设备制造商
        sb.append(Build.PRODUCT) // 整个产品的名称
        sb.append(Build.TAGS) // 设备标签。如release-keys 或测试的 test-keys
        sb.append(Build.TYPE) // 设备版本类型 主要为 "user" 或 "eng".
        sb.append(Build.USER) // 设备用户名 基本上都为android -build
        sb.append(Build.VERSION.RELEASE) // 获取系统版本字符串。如4.1.2 或2.2 或2.3等
        sb.append(Build.VERSION.CODENAME) // 设备当前的系统开发代号，一般使用REL代替
        sb.append(Build.VERSION.INCREMENTAL) // 系统源代码控制值，一个数字或者git hash值
//        sb.append(Build.VERSION.SDK_INT) // 系统的API级别 数字表示  也许更新系统岂不是不能用了
        sb.append(Build.SERIAL)
        val uniqueId = sb.toString().md5
        log("deviceID: $uniqueId")
        return uniqueId
    }

    // 测试查看信息
    private fun extraPrintUniqueDeviceIdInfo() {
        val sb = StringBuilder()
        try {
            val androidId: String? =
                Settings.Secure.getString(appContext.contentResolver, Settings.Secure.ANDROID_ID)
            if (androidId?.isNotEmpty() == true) {
                sb.append("androidId:${androidId}").append("\n")
            }
        } catch (ignored: Exception) {
        }
        sb.append("board:").append(Build.BOARD).append("\n") // 获取设备基板名称
        sb.append("bootloader:").append(Build.BOOTLOADER).append("\n") // 获取设备引导程序版本号
        sb.append("brand:").append(Build.BRAND).append("\n") // 获取设备品牌
        sb.append("cpu_abi:").append(Build.CPU_ABI).append("\n") // 获取设备指令集名称（CPU的类型）
        sb.append("cpu_abi2:").append(Build.CPU_ABI2).append("\n") // 获取第二个指令集名称
        sb.append("device:").append(Build.DEVICE).append("\n") // 获取设备驱动名称
        sb.append("display:").append(Build.DISPLAY).append("\n") // 获取设备显示的版本包（在系统设置中显示为版本号）和ID一样
        sb.append("fingerprint:").append(Build.FINGERPRINT).append("\n") // 设备的唯一标识。由设备的多个信息拼接合成。
        sb.append("hardware:").append(Build.HARDWARE).append("\n") // 设备硬件名称,一般和基板名称一样（BOARD）
        sb.append("id:").append(Build.ID).append("\n")// 设备版本号。
        sb.append("model:").append(Build.MODEL).append("\n") // 获取手机的型号 设备名称。
        sb.append("manufacturer:").append(Build.MANUFACTURER).append("\n") // 获取设备制造商
        sb.append("product:").append(Build.PRODUCT).append("\n") // 整个产品的名称
        sb.append("tags:").append(Build.TAGS).append("\n") // 设备标签。如release-keys 或测试的 test-keys
        sb.append("type:").append(Build.TYPE).append("\n") // 设备版本类型 主要为 "user" 或 "eng".
        sb.append("user:").append(Build.USER).append("\n") // 设备用户名 基本上都为android -build
        sb.append("release:").append(Build.VERSION.RELEASE)
            .append("\n") // 获取系统版本字符串。如4.1.2 或2.2 或2.3等
        sb.append("codename:").append(Build.VERSION.CODENAME).append("\n") // 设备当前的系统开发代号，一般使用REL代替
        sb.append("incremental:").append(Build.VERSION.INCREMENTAL)
            .append("\n") // 系统源代码控制值，一个数字或者git hash值
//        sb.append("sdkInt:").append(Build.VERSION.SDK_INT).append("\n") // 系统的API级别 数字表示  也许更新系统岂不是不能用了
        sb.append("serial:").append(Build.SERIAL)
        val uniqueId = sb.toString()
        log("CDKey device Info:\n$uniqueId")
    }
}

//androidId:5b58675694ee5abb
//board:sdm710
//bootloader:unknown
//brand:Meizu
//cpu_abi:arm64-v8a
//cpu_abi2:
//device:M1852
//display:Flyme 8.1.5.0A
//fingerprint:Meizu/meizu_M1852_CN/M1852:8.1.0/OPM1.171019.026/1592244368:user/release-keys
//hardware:qcom
//id:OPM1.171019.026
//model:M1852
//manufacturer:Meizu
//product:meizu_M1852_CN
//tags:release-keys
//type:user
//user:flyme
//release:8.1.0
//codename:REL
//incremental:1592244368
//serial:852QLDU223VEQ

// 09EF69B071A269C6D4E2F4C0EB249E86